<?php


namespace app\api\controller\home;
use think\Controller;
use app\api\model\DongTai;
use app\api\model\User;
use app\api\model\Launch;
use app\api\model\Dianzan;
use app\api\model\ShouChang;
use app\api\model\GuanZhu;
use app\api\model\Topic;
use FFMpeg\FFMpeg;
use FFMpeg\Coordinate\TimeCode;

class home extends Controller
{
	protected $upLoadCount = 0; // 设置上传图片数量，没有使用到
	protected $serverAddress = ''; // 服务器ip
    protected $videoDir = '';     // 服务器视频存放地址
    protected $videoCoverDir = '';
    // 初始化函数
    public function _initialize()
    {
        $this->serverAddress = config('serverConfig.address');
        $this->videoDir = config('serverConfig.videoDir');
        $this->videoCoverDir = config('serverConfig.videoCoverDir');
    }
    // 根据场景获得首页数据
    public function getRecommendData(){
        // $dongtai = DongTai::order('create_time desc')->limit(10)->select(); 
        
        $page = input('page');
        $mySelfId = input('userId'); // 获得登录的用户id
        $scene = input('scene');
        $dongtai = null;
        if($scene == 'recommend') {
    		$dongtai = DongTai::where("type ='image' or type = 'video'")->where('showguangchang','1')->order('dnumber desc,pnumber desc, snumber desc')->paginate(5,true);
        } else if($scene == 'square') {
		    $dongtai = DongTai::where("type ='image' or type = 'video'")->where('showguangchang','1')->order('create_time desc')->paginate(5,true);
        } else if($scene == 'guanzhu') {
        	$guanzhu = GuanZhu::where('user_id',$mySelfId)->column('gzuser_id'); // 获得当前用户关注的用户id列表，返回的是一个数组
        	$dongtai = DongTai::where("type ='image' or type = 'video'")->where('user_id','in', $guanzhu)->order('create_time desc')->paginate(5,true);
        }
        $data = [];
//        dump($dongtai);
        foreach ($dongtai as $value){
            $user = User::get($value->user_id); // 获得这个动态id所属的用户
            $inDianZan = 0; //  默认不在点赞里面
            $inShouChang = 0; // 默认不在此条动态的收藏里面
            $inGuanZhu = 0;
            if($mySelfId) 
            {
              // 如果用户id没传也不会引起报错
              // 登录用户是否点赞过该数据
               $tempDZ = Dianzan::where('dongtai_id', $value->id)->where('user_id', $mySelfId)->find();
               if($tempDZ) {$inDianZan = 1;}
               // 登录用户是否收藏过该数据
               $tempSC = ShouChang::where('dongtai_id', $value->id)->where('user_id', $mySelfId)->find();
               if($tempSC) {$inShouChang = 1;}
               
               $tempGZ = GuanZhu::where('user_id',$mySelfId)->where('gzuser_id',$user->id)->find();
               if($tempGZ) {$inGuanZhu = 1;}
            }
            $info = [
            	'user_id'=> $value->user_id,
                'img' => $user->img_url,
                'name' => $user->username,
                'sex' => $user->sex,
                'time' => $value->create_time
            ];
            $temp = [
                'info' => $info,
                'did' => $value->id,
                'user_id'=> $value->user_id,
                'content' =>  $value->content,
                'labels' => explode(';',$value->labels),
                'dianzan'=> $value->dnumber,
                'pinglun'=> $value->pnumber,
                'shoucang'=> $value->snumber,
                'urls' => explode(';',$value->url),
                'type'=> $value->type,
                'indianzan' => $inDianZan,
                'inshouchang'=> $inShouChang,
                'inGuanZhu' => $inGuanZhu,
            ];
            array_push($data,$temp); //保存全部保存刷新帮助

        }
        $res = [
            'msg' => '查询成功',
            'code' => 200,
            'data'=> $data,
        ];
        return json($res);
    }
    // 根据场景获得发现页数据
    public function getFindData(){
	    $page = input('page');
        $mySelfId = input('userId'); // 获得登录的用户id
        $scene = input('scene');
        $dongtai = null;
        if($scene == 'photograph') {
        	$dongtai = DongTai::where('type','photograph')->order('create_time desc')->paginate(10,true);
        } else if($scene == 'video') {
        	$dongtai = DongTai::where('type','video')->order('create_time desc')->paginate(5,true);
        } else if($scene == 'article') {
        	$dongtai = DongTai::where('type','article')->order('create_time desc')->paginate(5,true);
        } else if($scene == 'topic'){
        	$topics = topic::order('create_time desc')->paginate(10,true);
        	$data = [];
        	foreach ($topics as $topic){
        		$temp = [
        			'title' => $topic->name,
        			'desc' => $topic->description,
        			'img' => $topic->img,
        			];
    			array_push($data,$temp);
        	}
        	$res = [
            'msg' => '查询成功',
            'code' => 200,
            'data'=> $data,
        	];
        	return json($res);
        } else {
        	$res = [
        			'code' => -1,
        			'msg' => '正在添加此场景的后台代码',
        		];
        	 return json($res);
        	}
        $data = [];
//        dump($dongtai);
        foreach ($dongtai as $value){
            $user = User::get($value->user_id); // 获得这个动态id所属的用户
            $inDianZan = 0; //  默认不在点赞里面
            $inShouChang = 0; // 默认不在此条动态的收藏里面
            $inGuanZhu = 0; // 默认没有关注
            if($mySelfId) 
            {
              // 如果用户id没传也不会引起报错
              // 登录用户是否点赞过该数据
               $tempDZ = Dianzan::where('dongtai_id', $value->id)->where('user_id', $mySelfId)->find();
               if($tempDZ) {$inDianZan = 1;}
               // 登录用户是否收藏过该数据
               $tempSC = ShouChang::where('dongtai_id', $value->id)->where('user_id', $mySelfId)->find();
               if($tempSC) {$inShouChang = 1;}
               
               $tempGZ = GuanZhu::where('user_id',$mySelfId)->where('gzuser_id',$user->id)->find();
               if($tempGZ) {$inGuanZhu = 1;}
            }
            $info = [
            	'user_id'=> $value->user_id,
                'img' => $user->img_url,
                'name' => $user->username,
                'sex' => $user->sex,
                'time' => $value->create_time,
                'sign' => $user->sign,
            ];
            $temp = [
                'info' => $info,
                'did' => $value->id,
                'user_id'=> $value->user_id,
                'content' =>  $value->content,
                'labels' => explode(';',$value->labels),
                'dianzan'=> $value->dnumber,
                'pinglun'=> $value->pnumber,
                'shoucang'=> $value->snumber,
                'urls' => explode(';',$value->url),
                'type'=> $value->type,
                'indianzan' => $inDianZan,
                'inshouchang'=> $inShouChang,
                'inGuanZhu' => $inGuanZhu,
            ];
            array_push($data,$temp); //保存全部保存刷新帮助

        }
        $res = [
            'msg' => '查询成功',
            'code' => 200,
            'data'=> $data,
        ];
        return json($res);
    }
    protected function addWater($info,$type='text',$username = ''){
    	$image = \think\Image::open($info);
    	$fileName = $info->getFilename();
		$water_path = $info->getPathname();
    	$water_path = str_replace($fileName,'water-'.$fileName,$water_path);
    	if($type=='image'){
    	  $image->water('/userdata/water/water.png')->save($water_path);
    	} else {
    		$image->text('cos绘@'.$username,'girl.ttf',20,'#ffffff')->save($water_path);
    	}
    	return $water_path;
    }
    /* 
    *  @description 获取视频封面
    *  @param $fileUrl 本地视频的路劲
    *  @time 从视频的第几秒截取封面
    *  @return coverUrl 返回封面的本地路劲
    */
    protected function getVideoCover($fileUrl,$time = 1) {
    	$ffmpegBin = config('ffmpegBin');
    	$ffprobeBin = config('ffprobeBin');
    	
		$ffmpeg = FFMpeg::create(array(
		 
		    'ffmpeg.binaries'  => $ffmpegBin,//服务器ffmpeg安装路径下的文件
		 
		    'ffprobe.binaries' => $ffprobeBin //服务器ffmpeg安装路径下的文件
		 
		));

		// 封面路劲默认视频名称加.cover.jpg
		$coverUrl=$fileUrl.'cover.jpg';
        $video = $ffmpeg->open($fileUrl);
        $frame = $video->frame(TimeCode::fromSeconds($time));//获取第几帧
		$frame->save($coverUrl);  //保存图片
        return $coverUrl;
    }
    
    // 用户自己选择封面
    public function uploadVideoCover() {
		$file = request()->file('file');
		if(!$file) {
			$res = [
				'code' => -1,
				'msg' => '请先选择封面',
				'data' => null
			];
			return json($res);	
		}
		$vidioImgInfo = $file->move($this->videoCoverDir.DS); //
		if(!$vidioImgInfo) {
			$res = [
				'code' => -1,
				'msg' => '请换张图片吧，😙',
				'data' => ''
			];
			return json($res);
		}
		$videoImgUrl = $this->serverAddress.$this->videoCoverDir.$vidioImgInfo->getSaveName(); // 定义视频封面存放位置 定义封面文件的存放位置
		$res = [
				'code' => 200,
				'msg' => 'success',
				'data' => $videoImgUrl
			];
			return json($res);
    }
    
    
	// 上传文件函数
   /*动态发布调用的函数*/
    public function uploadFile() // 发布日常调用的方法
    {
    	$add = input('add');
    	$type = input('type');
    	$userId = input('userId');
    	// echo 'add is:'.$add.';';
    	if(!$add)
    	{
    		// 上传视频时返回视频地址和封面后缀
    		if($type == 'video') {
    			$serverAddress = config('serverConfig.address');
    			$videoDir = config('serverConfig.videoDir');
	    		$file = request()->file('file');
	    		$coverUrl = '';
	    		$videoUrl = '';
	    		$res = [];
	    		if($file) {
	    			$videoFile = $file;
	    			$infoVideo = $file->move($videoDir.DS); // ds为生成日期文件夹
					// 得到本地视频路劲 /userdata/videos/20211103/545k456lh23l4.mp4
					$localVideo = $videoDir.$infoVideo->getSaveName();
					// 存入数据库的路劲
				    $videoUrl=$serverAddress.$localVideo; // 定义视频的存放位置
	    			$coverUrl =$serverAddress.$this->getVideoCover($localVideo, '1');
	    			$res = [
		            'msg' => 'success',
		            'code' => 200,
		            'data'=> [
		            	'coverUrl' => $coverUrl,
		            	'videoUrl' => $videoUrl
		            	],
		        	];
	    		} else {
	    			$res = [
		            'msg' => '请选择一个视频文件',
		            'code' => -1,
		            'data'=> null
		            ];
	    		}
		        return json($res);
    		}
			// 如果不是通过发布按钮发布的动态，那么只是用到上传图片时通过验证，怎么都会通过,因为前端进行了格式逻辑控制  
    		return ;
    	}
    	// 发布的视频调用此方法
    	if($type == 'video'){ // 如果是视频
    		$videoUrl = input('videoUrl');
    		$coverUrl = input('coverUrl');
			$content = input('content');
    		$showGuangChang = input('showGuangChang');
    		$res = [
    			'code' => 200,
    			'data' => null,
    			'msg' => 'success'
			];
    		
    		// 使用uid会有问题，始终缓存的是最后一个的号，如果以前登录过的发布动态就会变成最后一个uid用户的
    		// $uid = cache('uid'); 
    		$userId = input('userId');
    		if(!$userId) {
    			$res['code'] = -1;
    			$res['msg'] = '缺少userId';
	        	return json($res);
    		} else if(!$content) {
    			$content = '';
    		} else if(!$videoUrl) {
    			$res['code'] = -1;
    			$res['msg'] = '缺少videoUrl';
    			return json($res);
    		} else if(!$coverUrl) {
    			$res['code'] = -1;
    			$res['msg'] = '缺少coverUrl';
    			return json($res);
    		}
    		// dump($files);
			$urls = $videoUrl.';'.$coverUrl;
			$user = User::get($userId);
	    	$data = 
	    	[
	    		'content'=> $content,
	    		'url'=> $urls,
	    		'labels'=>'美少女;二次元',
	    		'showguangchang'=> $showGuangChang?1:0,
	    		'type' => 'video',
	    	];
	    	$result = $user->dongtais()->save($data);
	    	if($result)
	    	{
	    		$res = [
	            'msg' => '发布成功',
	            'code' => 200,
	            'data'=> '',
	        	];
	        	return json($res);
    		} else {
    			$res = [
	            'msg' => '发布失败',
	            'code' => -1,
	        	];
	        	return json($res);
    		}
    		// end if
    	}
    	// 发布的是图片调用此方法
    	else if($type == 'img')
    	{
    		// $file = request()->file('file');
			$content = input('content');
	    	$showGuangChang = input('showGuangChang');
	    	// echo '$showGuangChang is:'.$showGuangChang.'<br>';
	    	// echo $content.'<br/>';
	    	// echo $showGuangChang.'<br/>';
	        // 获取表单上传文件 例如上传了001.jpg ,只接受图片格式
	        $files = request()->file('file');
			$uid = cache('uid'); // 会出现别人注册一个用户，你发布的动态变成它花部的这里未使用。
			$urls = '';
			// echo '11111111<br/>';
	         // 文件移动到指定目录下 这里为跟目录下的uploads文件夹里
		    // 移动到框架应用根目录/public/uploads/ 目录下
		    if($files)
		    {
			    foreach($files as $file)
			    {
		        	$info = $file->move('/userdata/images'.DS);
		        	if($info)
		        	{
			            // 成功上传后 获取上传信息
			            // 输出 jpg
			            // echo $info->getExtension().'<br/>';
			            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
			            // echo $info->getSaveName
			            $url='http://112.126.100.206/userdata/images/'.$info->getSaveName();
			            $urls = $urls.$url.';';
			            // 输出 42a79759f284b767dfcb2a0197904287.jpg
			            // echo $info->getFilename().'<br/>'; 
		        	} else
		        	{
			        	$res = [
				            'msg' => '发布失败',
				            'code' => -1,
				            'data'=> $data,
				        ];
				        return json($res);
			            // 上传失败获取错误信息
			            // echo $file->getError().'<br/>';
					 }
		    	}
	    	//end foreach
	    		
		    }
	    	$urls = rtrim($urls, ";");// 删除最后一个分号
	    	// echo $urls;
	    	// 使用uid会有问题，始终缓存的是最后一个的号，如果以前登录过的发布动态就会变成最后一个uid用户的
			// $user = User::get($uid);
			$user = User::get($userId);
	    	$data = 
	    	[
	    		'content'=> $content,
	    		'url'=> $urls,
	    		'labels'=>'美少女;二次元',
	    		'showguangchang'=> $showGuangChang?1:0,
	    		'type' => 'image',
	    	];
	    	$result = $user->dongtais()->save($data);
	    	if($result)
	    	{
	    		$res = [
	            'msg' => '发布成功',
	            'code' => 200,
	            'data'=> '',
	        ];
	        return json($res);
	    	}
    	}
    	// 如果动态是摄影 调用的方法
    	else if($type == 'photograph') 
    	{
    		// $file = request()->file('file');
			$content = input('content');
	    	$showGuangChang = input('showGuangChang');
	    	$labels = input('labels') ;
	    	// echo '$showGuangChang is:'.$showGuangChang.'<br>';
	    	// echo $content.'<br/>';
	    	// echo $showGuangChang.'<br/>';
	    	// echo $labels.'<br/>';
	        // 获取表单上传文件 例如上传了001.jpg ,只接受图片格式
	    	//   return 0;
	        $files = request()->file('file');
			$uid = cache('uid'); // 会出现别人注册一个用户，你发布的动态变成它花部的这里未使用。
			$urls = '';
			$user = User::get($userId);
			// echo '11111111<br/>';
	         // 文件移动到指定目录下 这里为跟目录下的userdata/photograph文件夹里
		    if($files)
		    {
			    foreach($files as $file)
			    {
		        	$info = $file->move('/userdata/photograph'.DS);
		        	if($info)
		        	{
			            // 成功上传后 获取上传信息
			            // 输出 jpg
			            // echo $info->getExtension().'<br/>';
			            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
			            // echo $info->getSaveName
			           // 添加水印并返回保存水印图的位置
		        		$url = 'http://112.126.100.206'.$this->addWater($info,'text',$user->username);
			            // $url='http://112.126.100.206/userdata/photograph/'.$info->getSaveName();
			            $urls = $urls.$url.';';
			            // 输出 42a79759f284b767dfcb2a0197904287.jpg
			            // echo $info->getFilename().'<br/>'; 
		        	} else
		        	{
			        	$res = [
				            'msg' => '发布失败',
				            'code' => -1,
				            'data'=> $data,
				        ];
				        return json($res);
			            // 上传失败获取错误信息
			            // echo $file->getError().'<br/>';
					 }
		    	}
	    	//end foreach
	    		
		    }
	    	$urls = rtrim($urls, ";");// 删除最后一个分号
	    	// echo $urls;
	    	// 使用uid会有问题，始终缓存的是最后一个的号，如果以前登录过的发布动态就会变成最后一个uid用户的
			// $user = User::get($uid);
	    	$data = 
	    	[
	    		'content'=> $content,
	    		'url'=> $urls,
	    		'labels'=>$labels,
	    		'showguangchang'=> $showGuangChang?1:0,
	    		'type' => 'photograph',
	    	];
	    	// dump($data);
	    	// return 0;
	    	$result = $user->dongtais()->save($data);
	    	if($result)
	    	{
	    		$res = [
	            'msg' => '发布成功',
	            'code' => 200,
	            'data'=> '',
	        ];
	        return json($res);
	    	}
    	}
    	// 如果发表的是文章，调用的方法
    	else if($type == 'article')
    	{
    		$content = input('content');
	    	$showGuangChang = input('showGuangChang');
	    	$labels = input('labels') ;
	    	// echo '$showGuangChang is:'.$showGuangChang.'<br>';
	    	// echo $content.'<br/>';
	    	// echo $showGuangChang.'<br/>';
	    	// echo $labels.'<br/>';
	        // return 0;
	         //获取表单上传文件 例如上传了001.jpg ,只接受图片格式
	        $file = request()->file('file');
			$uid = cache('uid'); // 会出现别人注册一个用户，你发布的动态变成它花部的这里未使用。
			$urls = '';
			$info = $file->rule('uniqid')->move('/userdata/article');
        	if($info)
        	{
	            // 成功上传后 获取上传信息
	            // 输出 jpg
	            // echo $info->getExtension().'<br/>';
	            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
	            // echo $info->getSaveName
	            $url='http://112.126.100.206/userdata/article/'.$info->getFilename();
	            // 输出 42a79759f284b767dfcb2a0197904287.jpg
	            // echo $info->getFilename().'<br/>'; 
	            $urls = $urls.$url;
	            $user = User::get($userId);
	    	$data = 
	    	[
	    		'content'=> $content,
	    		'url'=> $urls,
	    		'labels'=>$labels,
	    		'showguangchang'=> $showGuangChang?1:0,
	    		'type' => 'article',
	    	];
	    	// dump($data);
	    	// return 0;
	    	$result = $user->dongtais()->save($data);
	    	if($result)
	    	{
	    		$res = [
	            'msg' => '发布成功',
	            'code' => 200,
	            'data'=> '',
	        ];
	        return json($res);
        	} else
        	{
	        	$res = [
		            'msg' => '发布失败',
		            'code' => -1,
		            'data'=> $data,
		        ];
		        return json($res);
	            // 上传失败获取错误信息
	            // echo $file->getError().'<br/>';
			 }
			
    	}

    }
    }
    public function test()
    {
    	// 发表动态插入数据库测试方法
    	$uid = cache('uid');
    	$user = User::get($uid);
    	$data = 
    	[
    		'content'=>'每一天都美美哒',
    		'url'=>'1;2;3',
    		'labels'=>'美少女;二次元',
    		'showguangchang'=> true
    	];
    	// $dongtai = new DongTai();
    	// $dongtai->content ='每一天都美美打';
    	// $dongtai->url ='1;2;3;';
    	// $dongtai->type = 0;
    	// $dongtai->labels ='美少女;11;';
    	// echo $dongtai->content;
    	// echo $dongtai->type;
    	// echo $dongtai->url;
    	// echo $dongtai->labels;
    	// $dontai->dnumber =0 ;
    	// $dontai->pnumber =0 ;
    	// $dontai->snumber =0 ;
    	$result = $user->dongtais()->save($data);
    	dump($result);
    }
    // 启动图api
    public function getlaunch () {
		$seed = time(); // 使用时间作为种子源
		mt_srand($seed); // 播下随机数发生器种子
		$num =  mt_rand(1,10);// 根据种子生成1-10 之间的随机数，如果 $seed 值固定，则生成的随机数也不变
    	$launch = Launch::select();
    	// $launch = Lunch::where('id', $id)->select();
    	$result = [
    		'code'=> 200,
    		'msg'=>'获取成功',
    		'launchImgUrl'=> $launch[$num]->launch_url, // 启动图
    		'logoImgUrl'=> $launch[$num]->log_url, // 首屏图
    		'copy' => $launch[$num]->copy, // 版权文字
    		];
    	return json($result);
    }
}